In a packaged applications scenario, custom code equivalency solutions (which to may, for example, have been written decades previously) can cause severe maintenance grief and hinder tasks such as system upgrades, harmonization, and consolidation. Accordingly, such solutions are disadvantageous. Alternative approaches include attempting to find similar standard package solutions that may have been since released by the packaged applications vendor. However, some existing alternative approaches only function within a context of significant textual similarity between the custom solution and the standard solution, which is uncommon in practice. Additionally, while other existing alternative approaches utilize the commonality of external entities used such as tables, functions, etc., such approaches suffer from false positive challenges and do not help in understanding semantic equivalence or differences.
Consequently, a need exists for techniques that determine program equivalence based on a hierarchy of light-weight and deep program semantics and related canonical representations.